#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>

typedef int DataType;

typedef struct Node {
    DataType data;
    struct Node *next;
} QueueNode;

typedef struct {
    QueueNode *front, *rear;
} LinkQueue;

void init(LinkQueue *q) {
    q->front = q->rear = NULL;
}

bool isEmpty(LinkQueue *q) {
    return q->front == NULL;
}
//入队
void push(LinkQueue *q,DataType x){
    QueueNode *NewNode=(QueueNode*)malloc(sizeof (QueueNode));
    if(NewNode==NULL){
        printf("新节点内存分布失败");
    }
    NewNode->data=x;
    NewNode->next=NULL;
    if(isEmpty(q)){
        q->front=q->rear=NewNode;
    }
}

void printfQueue(LinkQueue *q){
    if(isEmpty(q)){
        printf("这是一个空");
    }
    QueueNode *temp=q->front;
    while (temp!=NULL){
        printf("%d   ",temp->data);
        temp=temp->next;
    }
}

void pop(LinkQueue *q){
    if (isEmpty(q)){
        printf("这是一个空");
        return;
    }
    QueueNode *temp=q->front;
    q->front=temp->next;
    if(q->rear==temp){
        q->rear=NULL;
    }
    free(temp);
}


int main() {
    LinkQueue q;
    init(&q);
    printf("队列是否为空: %s\n", isEmpty(&q) ? "是" : "否");
    push(&q,20);
    push(&q,30);
    push(&q,40);
    return 0;
}
